{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Customizing Filters in Typed-FFmpeg\n",
    "\n",
    "### Introduction to Custom Filters\n",
    "While Typed-FFmpeg supports most of the FFmpeg filters out-of-the-box, there might be instances where you need to use filters that are not predefined in the library. For such cases, Typed-FFmpeg provides a flexible way to define and utilize custom filters.\n",
    "\n",
    "### Creating Single-input Custom Filters\n",
    "Easily create your own single-input custom filters with the `vfilter`, `afilter` method. This allows for direct application of new or specialized video filters not standard in Typed-FFmpeg."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Exception reporting mode: Minimal\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"760pt\" height=\"44pt\"\n",
       " viewBox=\"0.00 0.00 760.00 44.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 40)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-40 756,-40 756,4 -4,4\"/>\n",
       "<!-- 604ab03321d8ab8f -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>604ab03321d8ab8f</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"89,-36 0,-36 0,0 89,0 89,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"44.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input.mp4</text>\n",
       "</g>\n",
       "<!-- 4a9c5cba9739f997 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>4a9c5cba9739f997</title>\n",
       "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"516,-36 169,-36 169,0 516,0 516,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"342.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0] custom_filter= option1=value1:option2=value2 [s0]</text>\n",
       "</g>\n",
       "<!-- 604ab03321d8ab8f&#45;&gt;4a9c5cba9739f997 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>604ab03321d8ab8f&#45;&gt;4a9c5cba9739f997</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M89.18,-18C108.55,-18 132.79,-18 158.52,-18\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"158.84,-21.5 168.84,-18 158.84,-14.5 158.84,-21.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"129\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
       "</g>\n",
       "<!-- 58a0a4c9beb05c96 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>58a0a4c9beb05c96</title>\n",
       "<polygon fill=\"#99ccff\" stroke=\"black\" points=\"752,-36 604,-36 604,0 752,0 752,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"678\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;map [s0] output.mp4</text>\n",
       "</g>\n",
       "<!-- 4a9c5cba9739f997&#45;&gt;58a0a4c9beb05c96 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>4a9c5cba9739f997&#45;&gt;58a0a4c9beb05c96</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M516.11,-18C543.23,-18 570.14,-18 593.97,-18\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"593.99,-21.5 603.99,-18 593.99,-14.5 593.99,-21.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"560\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">s0 &#45;&gt; 0</text>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "OutputStream(node=OutputNode(kwargs=FrozenDict({}), inputs=(VideoStream(node=FilterNode(kwargs=FrozenDict({'option1': 'value1', 'option2': 'value2'}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input.mp4'), index=None, optional=False),), name='custom_filter', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False),), filename='output.mp4'), index=None, optional=False)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%xmode Minimal\n",
    "import ffmpeg\n",
    "\n",
    "# Apply a custom single-input video filter\n",
    "(\n",
    "    ffmpeg.input(\"input.mp4\")\n",
    "    .vfilter(\n",
    "        name=\"custom_filter\", option1=\"value1\", option2=\"value2\"\n",
    "    )  # Apply \"custom_filter\" with specified options\n",
    "    .output(filename=\"output.mp4\")\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This code snippet will correspond to the following FFmpeg command line:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "\"ffmpeg -i input.mp4 -filter_complex '[0]custom_filter=option1=value1:option2=value2[s0]' -map '[s0]' output.mp4\""
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(\n",
    "    ffmpeg.input(\"input.mp4\")\n",
    "    .vfilter(\n",
    "        name=\"custom_filter\", option1=\"value1\", option2=\"value2\"\n",
    "    )  # Apply \"custom_filter\" with specified options\n",
    "    .output(filename=\"output.mp4\")\n",
    ").compile_line()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatively:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"540pt\" height=\"44pt\"\n",
       " viewBox=\"0.00 0.00 540.00 44.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 40)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-40 536,-40 536,4 -4,4\"/>\n",
       "<!-- 604ab03321d8ab8f -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>604ab03321d8ab8f</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"89,-36 0,-36 0,0 89,0 89,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"44.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input.mp4</text>\n",
       "</g>\n",
       "<!-- 19a46f1d094c55d1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>19a46f1d094c55d1</title>\n",
       "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"532,-36 169,-36 169,0 532,0 532,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"350.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0] custom_video_filter= option1=value1:option2=value2 </text>\n",
       "</g>\n",
       "<!-- 604ab03321d8ab8f&#45;&gt;19a46f1d094c55d1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>604ab03321d8ab8f&#45;&gt;19a46f1d094c55d1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M89.06,-18C108.49,-18 132.86,-18 158.85,-18\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"158.88,-21.5 168.88,-18 158.88,-14.5 158.88,-21.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"129\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "VideoStream(node=FilterNode(kwargs=FrozenDict({'option1': 'value1', 'option2': 'value2'}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input.mp4'), index=None, optional=False),), name='custom_video_filter', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import ffmpeg\n",
    "\n",
    "# Define a custom video filter for later use\n",
    "ffmpeg.vfilter(\n",
    "    ffmpeg.input(\"input.mp4\"),\n",
    "    name=\"custom_video_filter\",\n",
    "    option1=\"value1\",\n",
    "    option2=\"value2\",\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Implementing Multi-input Custom Filters\n",
    "For filters that require multiple inputs, specify the type of each input using the `input_typings` parameter to ensure correct stream handling.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"357pt\" height=\"98pt\"\n",
       " viewBox=\"0.00 0.00 357.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 353,-94 353,4 -4,4\"/>\n",
       "<!-- 4365f434cb9d947c -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4365f434cb9d947c</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-90 0,-90 0,-54 96,-54 96,-90\"/>\n",
       "<text text-anchor=\"middle\" x=\"48\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
       "</g>\n",
       "<!-- 2dec9b05adba945f -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2dec9b05adba945f</title>\n",
       "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"349,-63 176,-63 176,-27 349,-27 349,-63\"/>\n",
       "<text text-anchor=\"middle\" x=\"262.5\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0][1] custom_video_filter </text>\n",
       "</g>\n",
       "<!-- 4365f434cb9d947c&#45;&gt;2dec9b05adba945f -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4365f434cb9d947c&#45;&gt;2dec9b05adba945f</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.16,-66.01C116.79,-63.39 141.79,-60.21 166.02,-57.13\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"166.51,-60.6 175.99,-55.87 165.63,-53.65 166.51,-60.6\"/>\n",
       "<text text-anchor=\"middle\" x=\"136\" y=\"-66.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
       "</g>\n",
       "<!-- 1a9957d0ad34d0c6 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1a9957d0ad34d0c6</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input2.mp4</text>\n",
       "</g>\n",
       "<!-- 1a9957d0ad34d0c6&#45;&gt;2dec9b05adba945f -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1a9957d0ad34d0c6&#45;&gt;2dec9b05adba945f</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.16,-23.99C116.79,-26.61 141.79,-29.79 166.02,-32.87\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"165.63,-36.35 175.99,-34.13 166.51,-29.4 165.63,-36.35\"/>\n",
       "<text text-anchor=\"middle\" x=\"136\" y=\"-34.8\" font-family=\"Times,serif\" font-size=\"14.00\">1 &#45;&gt; 1</text>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "VideoStream(node=FilterNode(kwargs=FrozenDict({}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='custom_video_filter', input_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False)"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import ffmpeg\n",
    "from ffmpeg.schema import StreamType\n",
    "\n",
    "# Create a multi-input custom video filter\n",
    "(\n",
    "    ffmpeg.input(\"input1.mp4\").vfilter(\n",
    "        ffmpeg.input(\"input2.mp4\"),\n",
    "        name=\"custom_video_filter\",\n",
    "        input_typings=(StreamType.video, StreamType.video),\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Alternatively, use the `vfilter`, `afilter` function directly for multi-input scenarios:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"357pt\" height=\"98pt\"\n",
       " viewBox=\"0.00 0.00 357.00 98.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 94)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-94 353,-94 353,4 -4,4\"/>\n",
       "<!-- 4365f434cb9d947c -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>4365f434cb9d947c</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-90 0,-90 0,-54 96,-54 96,-90\"/>\n",
       "<text text-anchor=\"middle\" x=\"48\" y=\"-68.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
       "</g>\n",
       "<!-- 2dec9b05adba945f -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2dec9b05adba945f</title>\n",
       "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"349,-63 176,-63 176,-27 349,-27 349,-63\"/>\n",
       "<text text-anchor=\"middle\" x=\"262.5\" y=\"-41.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0][1] custom_video_filter </text>\n",
       "</g>\n",
       "<!-- 4365f434cb9d947c&#45;&gt;2dec9b05adba945f -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>4365f434cb9d947c&#45;&gt;2dec9b05adba945f</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.16,-66.01C116.79,-63.39 141.79,-60.21 166.02,-57.13\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"166.51,-60.6 175.99,-55.87 165.63,-53.65 166.51,-60.6\"/>\n",
       "<text text-anchor=\"middle\" x=\"136\" y=\"-66.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
       "</g>\n",
       "<!-- 1a9957d0ad34d0c6 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1a9957d0ad34d0c6</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input2.mp4</text>\n",
       "</g>\n",
       "<!-- 1a9957d0ad34d0c6&#45;&gt;2dec9b05adba945f -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1a9957d0ad34d0c6&#45;&gt;2dec9b05adba945f</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.16,-23.99C116.79,-26.61 141.79,-29.79 166.02,-32.87\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"165.63,-36.35 175.99,-34.13 166.51,-29.4 165.63,-36.35\"/>\n",
       "<text text-anchor=\"middle\" x=\"136\" y=\"-34.8\" font-family=\"Times,serif\" font-size=\"14.00\">1 &#45;&gt; 1</text>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "VideoStream(node=FilterNode(kwargs=FrozenDict({}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False), AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input2.mp4'), index=None, optional=False)), name='custom_video_filter', input_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import ffmpeg\n",
    "from ffmpeg.schema import StreamType\n",
    "\n",
    "# Define and apply a multi-input custom video filter\n",
    "ffmpeg.vfilter(\n",
    "    ffmpeg.input(\"input1.mp4\"),\n",
    "    ffmpeg.input(\"input2.mp4\"),\n",
    "    name=\"custom_video_filter\",\n",
    "    input_typings=(StreamType.video, StreamType.video),\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Defining Multi-output Custom Filters\n",
    "In cases where a filter generates multiple outputs, use `ffmpeg.filter_multi_output` function and specify the expected types of these outputs using the `output_typings` parameter. This feature is particularly useful for filters that split the input stream into several output streams.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"299pt\" height=\"44pt\"\n",
       " viewBox=\"0.00 0.00 299.00 44.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 40)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-40 295,-40 295,4 -4,4\"/>\n",
       "<!-- 154ff34600e9d197 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>154ff34600e9d197</title>\n",
       "<polygon fill=\"#99cc00\" stroke=\"black\" points=\"96,-36 0,-36 0,0 96,0 96,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"48\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">&#45;i input1.mp4</text>\n",
       "</g>\n",
       "<!-- 55777e461d6738ad -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>55777e461d6738ad</title>\n",
       "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"291,-36 176,-36 176,0 291,0 291,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"233.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\">[0] custom_split </text>\n",
       "</g>\n",
       "<!-- 154ff34600e9d197&#45;&gt;55777e461d6738ad -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>154ff34600e9d197&#45;&gt;55777e461d6738ad</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M96.26,-18C117.44,-18 142.8,-18 165.86,-18\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"165.93,-21.5 175.93,-18 165.93,-14.5 165.93,-21.5\"/>\n",
       "<text text-anchor=\"middle\" x=\"136\" y=\"-21.8\" font-family=\"Times,serif\" font-size=\"14.00\">0 &#45;&gt; 0</text>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "FilterNode(kwargs=FrozenDict({}), inputs=(AVStream(node=InputNode(kwargs=FrozenDict({}), inputs=(), filename='input1.mp4'), index=None, optional=False),), name='custom_split', input_typings=(<StreamType.video: 'video'>,), output_typings=(<StreamType.video: 'video'>, <StreamType.video: 'video'>))"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import ffmpeg\n",
    "from ffmpeg.schema import StreamType\n",
    "\n",
    "# Create a custom filter that yields multiple outputs\n",
    "ffmpeg.filter_multi_output(\n",
    "    ffmpeg.input(\"input1.mp4\"),\n",
    "    name=\"custom_split\",\n",
    "    input_typings=(StreamType.video,),\n",
    "    output_typings=(StreamType.video, StreamType.video),\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By following these guidelines, you can extend the functionality of Typed-FFmpeg to accommodate any specific filtering needs, ensuring maximum flexibility and efficiency in your video processing tasks.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "### Define Source Filter\n",
    "Source filter can also be defined in the same way\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.43.0 (0)\n",
       " -->\n",
       "<!-- Title: %3 Pages: 1 -->\n",
       "<svg width=\"515pt\" height=\"44pt\"\n",
       " viewBox=\"0.00 0.00 515.00 44.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 40)\">\n",
       "<title>%3</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-40 511,-40 511,4 -4,4\"/>\n",
       "<!-- 3064ec056e14e614 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>3064ec056e14e614</title>\n",
       "<polygon fill=\"#ffcc00\" stroke=\"black\" points=\"507,-36 0,-36 0,0 507,0 507,-36\"/>\n",
       "<text text-anchor=\"middle\" x=\"253.5\" y=\"-14.9\" font-family=\"Helvetica,sans-Serif\" font-size=\"12.00\"> color= color=black:duration=1:output_typings=(&lt;StreamType.video\\: \\&#39;video\\&#39;&gt;,) </text>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "VideoStream(node=FilterNode(kwargs=FrozenDict({'color': 'black', 'duration': 1, 'output_typings': (<StreamType.video: 'video'>,)}), inputs=(), name='color', input_typings=(), output_typings=(<StreamType.video: 'video'>,)), index=0, optional=False)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import ffmpeg\n",
    "from ffmpeg.schema import StreamType\n",
    "\n",
    "ffmpeg.vfilter(\n",
    "    name=\"color\",\n",
    "    color=\"black\",\n",
    "    duration=1,\n",
    "    input_typings=(),\n",
    "    output_typings=(StreamType.video,),\n",
    ")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
